# 函数是指将一组语句的集合通过一个名字(函数名)封装起来，要想执行这个函数，只需调用其函数名即可
def sayHi():
    print("Hello, I'm nobody")
sayHi()

# input 函数
myInput = input()
print(myInput)
myInput = input('请输入内容')
print(myInput)

# 入参分为可变和不可变，可变的比如列表，不可变比如字符串

# 默认参数 对于一些调用时非必选的参数，可设置成默认参数，这样，即使用户不填，也不影响函数正常运行。

def stu_form(name, nationality='CN'):
    info = f'''
    Name : {name},
    Nation: {nationality}
    '''
    print(info)
stu_form("hey")
stu_form("ha", "gb")

# 不能将位置参数写到关键字参数的后面
'''
递归函数 自己调用自己 
特性：1. 必须要有一个明确的的结束条件
2. 每次更深一层的递归，会导致栈溢出
3. 递归效率不高，递归层次过多会导致栈溢出
'''
def sum_num(n):
    if n <= 1:
        return 1
    return sum_num(n - 1) + n
print(sum_num(10))

# 匿名函数
func = lambda x, y: x + y
print("func", func(2, 3))
name_age = [2, 3, 3, 6, 6, 9]
# 每个变量加 1
print(list(map(lambda x: x + 1, name_age)))

# 高阶函数 至少入参或者出参有一个是函数
def get_abs(n):
    if n < 0:
        n = int(str(n).strip('-'))
    return n
def add(x, y, f):
    return f(x) + f(y)
res = add(3, -2, get_abs)
print('res = ', res)

# build-in functions 内置函数
print(abs(-23))
print(all([False, True]))
print(any([False, True]))
# 是否可调用
print(callable(sum))
# filter 过滤
items = [1, 3, 4, 5]
print(filter(lambda a: a < 3.5, items))
print("items", items)
# frozenset 把一个集合编程不可修改的
print("globals", globals())
print("locals", locals())

print(isinstance(1, int))
# reversed 把一个列表进行反转
# import 导入模块用
